package com.yr.ryjk.test.service;

import java.lang.reflect.InvocationTargetException;
import java.util.List;
import java.util.Map;

import com.yr.ryjk.test.entity.Question;
import com.yr.ryjk.test.entity.QuestionEdit;
import com.yr.ryjk.test.entity.Test;
import com.yr.ryjk.test.entity.TestEdit;
import com.yr.ryjk.test.entity.TestResult;
import com.yr.ryjk.test.entity.TestResultEdit;
import com.yr.ryjk.test.entity.TestType;

public interface ITestService {
	/**
	 * 分页获取测试类型数据
	 * @param pageNo
	 * @param pageSize
	 * @return
	 */
	Object getTypeListOfPage(int pageNo, int pageSize);
	/**
	 * 添加测试类型
	 * @param testType
	 */
	void addType(TestType testType);
	/**
	 * 修改testType
	 * @param testType
	 * @throws InvocationTargetException 
	 * @throws IllegalAccessException 
	 */
	void modifyType(TestType testType) throws IllegalAccessException, InvocationTargetException;
	/**
	 * 删除测试分类
	 * @param ids
	 */
	void deleteType(String ids);
	/**
	 * 切换状态
	 * @param ids id集合，逗号分割
	 */
	void modifyToggleTypeStatus(String ids);
	/**
	 * 获取testType信息
	 * @param testId
	 * @return
	 */
	TestType getTypeInfo(String testId);
	/**
	 * 获取所有测试题分类
	 * @return
	 */
	List<TestType> listType(int isClose);
	
	/**
	 * 分页获取试卷数据
	 * @param pageNo
	 * @param pageSize
	 * @param testTypeId 
	 * @return
	 */
	Object getTestListOfPage(int pageNo, int pageSize, String testTypeId);
	/**
	 * 添加
	 * @param test
	 * @return
	 */
	void addTest(Test test);
	/**
	 * 修改
	 * @param test
	 * @throws InvocationTargetException 
	 * @throws IllegalAccessException 
	 */
	void modifyTest(TestEdit test) throws IllegalAccessException, InvocationTargetException;

	/**
	 * 获取信息
	 * @param id
	 * @return
	 */
	Test getTestInfo(String testId);

	/**
	 * 切换状态
	 * @param ids id集合，逗号分割
	 */
	void modifyToggleTestStatus(String ids);
	/**
	 * 获取指定分类的试卷
	 * @return
	 */
	List<Test> listTestOfType(String testTypeId);
	/**
	 * 删除试卷
	 * @param ids
	 */
	void deleteTest(String ids);


	/**
	 * 分页获取指定分类的测试题
	 * @param testId
	 * @param pageNo
	 * @param testId2
	 * @return
	 */
	Map<String, Object> getQuestionOfType(int pageNo, int pageSize, String testId);
	/**
	 * 为分类添加试题
	 * @param question
	 * @return 
	 */
	Map<String, Object> addQuestion(Question question);
	/**
	 * 为分类添加试题
	 * @param question
	 */
	Question getQuestionInfo(String id);
	/**
	 * 修改分类信息
	 * @param question
	 * @return 
	 * @throws InvocationTargetException 
	 * @throws IllegalAccessException 
	 */
	Map<String, Object> modifyQuestion(QuestionEdit question) throws IllegalAccessException, InvocationTargetException;

	/**
	 * 删除测试题
	 * @param ids
	 */
	void deleteQuestion(String ids);
	/**
	 * 获取指定测试类型的所有试题
	 * @param testId
	 * @return
	 */
	List<Question> getAllQuestionOfTest(String testId);

	/**
	 * 获取测试结果
	 * @param pageNo
	 * @param pageSize
	 * @param testId
	 * @return
	 */
	Map<String, Object> getResult(int pageNo, int pageSize, String testId);
	/**
	 * 添加测试结果
	 * @param result
	 */
	void addResult(TestResult result);
	/**
	 * 修改测试结果
	 * @param result
	 * @throws InvocationTargetException 
	 * @throws IllegalAccessException 
	 */
	void modifyResult(TestResultEdit result) throws IllegalAccessException, InvocationTargetException;
	/**
	 * 删除测试结果
	 * @param ids
	 */
	void deleteResult(String ids);
	/**
	 * 根据id获取测试结果信息
	 * @param resultId
	 * @return
	 */
	TestResult getResult(String resultId);
	/**
	 * app根据测试分数和类型获取测试结果
	 * @param testId
	 * @param score
	 * @return
	 */
	TestResult getResultByScoreAndType(String testId, int score);
}
